package com.greatwall.hip.cms.util;

import cn.hutool.core.collection.CollUtil;
import com.greatwall.hip.cms.constant.AlertLevelEnum;

import java.util.ArrayList;
import java.util.List;

/**
 * @author ljl
 * @date 2021/7/7 21:48
 **/
public class AlertLevelUtil {

    /**
     * 风险计算逻辑：
     * <p>
     * 四类指标的风险组合决定了总体风险等级：
     * a)高等风险的情况：四类指标都是高风险；
     * b)中等风险的情况：存在高风险(除全高外)，或全为中风险；
     * c)低等风险的情况：存在中风险(除全中外)，或全为低风险；
     * d)无风险情况：其他组合；
     * e)上述总体风险等级判断的组合支持可配
     *
     * @param enums
     * @return
     */
    public static AlertLevelEnum calAlertLevel(List<AlertLevelEnum> enums) {
        long highCount = enums.stream().filter(alertLevelEnum -> alertLevelEnum == AlertLevelEnum.HIGH).count();

        long middleCount = enums.stream().filter(alertLevelEnum -> alertLevelEnum == AlertLevelEnum.MIDDLE).count();

        long lowCount = enums.stream().filter(alertLevelEnum -> alertLevelEnum == AlertLevelEnum.LOW).count();

        long normalCount = enums.stream().filter(alertLevelEnum -> alertLevelEnum == AlertLevelEnum.NORMAL).count();

        if (CollUtil.isEmpty(enums)) {
            return AlertLevelEnum.NORMAL;
        }

        if (highCount == enums.size()) {
            return AlertLevelEnum.HIGH;
        }
        if (highCount > 0) {
            return AlertLevelEnum.MIDDLE;
        }
        if (middleCount == enums.size()) {
            return AlertLevelEnum.MIDDLE;
        }
        if (middleCount > 0) {
            return AlertLevelEnum.LOW;
        }
        if (lowCount == enums.size()) {
            return AlertLevelEnum.LOW;
        }
        return AlertLevelEnum.NORMAL;
    }

    public static void main(String[] args) {
        List<AlertLevelEnum> enums = new ArrayList<>();
        enums.add(AlertLevelEnum.LOW);
        enums.add(AlertLevelEnum.LOW);
        enums.add(AlertLevelEnum.LOW);
        enums.add(AlertLevelEnum.NORMAL);
        System.out.println(calAlertLevel(enums));
    }
}
